package com.yanftch.stopcoding.common.network
import okhttp3.*
import java.io.IOException
import java.net.URL
import javax.imageio.ImageIO
import javax.swing.SwingUtilities
import kotlin.concurrent.thread


class ImageLoader_cp {

    // OkHttpClient 实例
    private val client = OkHttpClient()

    // 加载图片的主方法，成功返回 ImageResult，失败返回 null
    fun loadImage(url: String, callback: (ImageResult?) -> Unit) {
        // 构建 OkHttp 请求
        val request = Request.Builder().url(url).build()

        // 异步执行 OkHttp 请求
        client.newCall(request).enqueue(object : Callback {
            override fun onFailure(call: Call, e: IOException) {
                // OkHttp 失败，回退到 ImageIO 加载
                e.printStackTrace()
                loadImageWithImageIO(url, callback)
            }

            override fun onResponse(call: Call, response: Response) {
                if (response.isSuccessful) {
                    // 获取重定向后的真实 URL
                    val realUrl = response.request.url.toString()

                    // 尝试读取图片数据
                    val image = response.body?.byteStream()?.use { inputStream ->
                        ImageIO.read(inputStream)
                    }

                    // 如果图片和URL都成功获取，则返回 ImageResult，否则回退到 ImageIO
                    if (image != null) {
                        SwingUtilities.invokeLater {
                            callback(ImageResult(image, realUrl))
                        }
                    } else {
                        // 图片加载失败，使用 ImageIO 作为备选方案
                        loadImageWithImageIO(url, callback)
                    }
                } else {
                    // OkHttp 响应失败，使用 ImageIO 作为备选方案
                    loadImageWithImageIO(url, callback)
                }
            }
        })
    }

    // 如果 OkHttp 失败，使用 ImageIO 加载图片
    private fun loadImageWithImageIO(url: String, callback: (ImageResult?) -> Unit) {
        thread {
            try {
                // 尝试使用 ImageIO 直接加载图片
                val image = ImageIO.read(URL(url))
                if (image != null) {
                    // 如果图片成功加载，返回 ImageResult
                    SwingUtilities.invokeLater {
                        callback(ImageResult(image, url))
                    }
                } else {
                    // 图片加载失败，返回 null
                    SwingUtilities.invokeLater {
                        callback(null)
                    }
                }
            } catch (e: IOException) {
                e.printStackTrace()

                // 加载失败，返回 null
                SwingUtilities.invokeLater {
                    callback(null)
                }
            }
        }
    }
}
